I modified the function insertErrorIR in ast-to-ir.js like this:
/**
Throw an error object containing an error message
*/
function insertErrorIR(context, errorName, errorMsg)
{
// Find the error contructor
var errorCtor = undefined; //FIXME: was just: var errorCtor;
print("insertErrorIR errorName="+String(errorName)); //FIXME
switch (errorName)
{
case 'RangeError':
errorCtor = insertCtxReadIR(context, ['rangeerror']);
break;
case 'ReferenceError':
errorCtor = insertCtxReadIR(context, ['referror']);
break;
case 'SyntaxError':
errorCtor = insertCtxReadIR(context, ['syntaxerror']);
break;
case 'TypeError':
errorCtor = insertCtxReadIR(context, ['typeerror']);
break;
case 'URIError':
errorCtor = insertCtxReadIR(context, ['urierror']);
break;
}
print("errorCtor="+String(errorCtor)); //FIXME
assert (
errorCtor !== undefined,
'error constructor not found for: "' + errorName + '"'
);
// Create a new context from which to throw the exception
var throwCtx = context.pursue(null);
// Insert a call to the error constructor
var excVal = insertPrimCallIR(
throwCtx,
'makeError',
[
errorCtor,
ConstValue.getConst(errorMsg)
]
);
// Throw the error created
throwToIR(context, throwCtx, excVal);
}
and now get a little further in the bootstrap:
Generating IR for: "object layout source"
Generating IR for: "FFI wrapper source"
Generating IR for: "runtime/utility.js"
Generating IR for: "runtime/primitives.js"
insertCondErrorIR errorName=TypeError
insertErrorIR errorName=TypeError
errorCtor=box $t_35 = load_box $t_33, $t_34
insertCondErrorIR errorName=TypeError
insertErrorIR errorName=TypeError
errorCtor=box $t_14 = load_box $t_12, $t_13
insertCondErrorIR errorName=TypeError
insertErrorIR errorName=TypeError
errorCtor=box $t_27 = load_box $t_25, $t_26
Generating IR for: "runtime/strings.js"
Generating IR for: "runtime/ffi.js"
Generating IR for: "runtime/rtinit.js"
Performing IR lowering for: "object layout source"
Performing IR lowering for: "FFI wrapper source"
Performing IR lowering for: "runtime/utility.js"
Performing IR lowering for: "runtime/primitives.js"
Performing IR lowering for: "runtime/strings.js"
Performing IR lowering for: "runtime/ffi.js"
Performing IR lowering for: "runtime/rtinit.js"
Generating machine code for: "object layout source"
*** RUN-TIME ERROR ***
SplitError: position '11' happens at the beginning of the interval
So it seems that my changes have removed the bug "error constructor not found for: "TypeError"" but it is not clear why...
I guess the next problem can wait until the first two are fixed...
Marc