void ExprCompiler::write(int line, OpCode op, int a, int b, int c) { ASSERT_INDEX(a, 256); ASSERT_INDEX(b, 256); ASSERT_INDEX(c, 256); chunk_->write(currentFile_, line, MAKE_ABC(a, b, c, op)); }
temp<String> String::substring(int start, int end) const { ASSERT_INDEX(start, length()); ASSERT_INDEX(end, length() + 1); // End is past the last character. ASSERT(start <= end, "Start must come before end."); return create(&chars_[start], end - start); }
void VM::bindClass(const char* module, CoreClass core, const char* name) { ASSERT_INDEX(core, CLASS_MAX); ASSERT(coreClasses_[core].isNull(), "Class is already bound."); Module* moduleObj = findModule(module); ASSERT_NOT_NULL(moduleObj); gc<Object> value = moduleObj->getVariable(name); ASSERT(!value.isNull(), "Could not find variable."); coreClasses_[core] = asClass(value); }
gc<ClassObject> VM::getClass(CoreClass core) { ASSERT_INDEX(core, CLASS_MAX); ASSERT(!coreClasses_[core].isNull(), "Class has not been bound yet."); return coreClasses_[core]; }
gc<String> VM::getSymbol(symbolId symbol) const { ASSERT_INDEX(symbol, symbols_.count()); return symbols_[symbol]; }
const char String::operator [](int index) const { ASSERT_INDEX(index, length() + 1); // Allow accessing the terminator. return chars_[index]; }