QJsonObject OneSixLibrary::toJson() { QJsonObject libRoot; libRoot.insert("name", m_name); if (m_absolute_url.size()) libRoot.insert("MMC-absoluteUrl", m_absolute_url); if (m_hint.size()) libRoot.insert("MMC-hint", m_hint); if (m_base_url != "http://" + URLConstants::AWS_DOWNLOAD_LIBRARIES && m_base_url != "https://" + URLConstants::AWS_DOWNLOAD_LIBRARIES && m_base_url != "https://" + URLConstants::LIBRARY_BASE && !m_base_url.isEmpty()) { libRoot.insert("url", m_base_url); } if (isNative() && m_native_suffixes.size()) { QJsonObject nativeList; auto iter = m_native_suffixes.begin(); while (iter != m_native_suffixes.end()) { nativeList.insert(OpSys_toString(iter.key()), iter.value()); iter++; } libRoot.insert("natives", nativeList); } if (isNative() && extract_excludes.size()) { QJsonArray excludes; QJsonObject extract; for (auto exclude : extract_excludes) { excludes.append(exclude); } extract.insert("exclude", excludes); libRoot.insert("extract", extract); } if (m_rules.size()) { QJsonArray allRules; for (auto &rule : m_rules) { QJsonObject ruleObj = rule->toJson(); allRules.append(ruleObj); } libRoot.insert("rules", allRules); } return libRoot; }
Function* JavaLLVMCompiler::parseFunction(JavaMethod* meth, Class* customizeFor) { assert(!isAbstract(meth->access)); LLVMMethodInfo* LMI = getMethodInfo(meth); Function* func = LMI->getMethod(customizeFor); // We are jitting. Take the lock. vmkit::VmkitModule::protectIR(); if (func->getLinkage() == GlobalValue::ExternalWeakLinkage) { JavaJIT jit(this, meth, func, LMI->isCustomizable ? customizeFor : NULL); if (isNative(meth->access)) { jit.nativeCompile(); vmkit::VmkitModule::runPasses(func, JavaNativeFunctionPasses); vmkit::VmkitModule::runPasses(func, J3FunctionPasses); } else { jit.javaCompile(); vmkit::VmkitModule::runPasses(func, JavaFunctionPasses); vmkit::VmkitModule::runPasses(func, J3FunctionPasses); } func->setLinkage(GlobalValue::ExternalLinkage); if (!LMI->isCustomizable && jit.isCustomizable) { // It's the first time we parsed the method and we just found // out it can be customized. // TODO(geoffray): return a customized version to this caller. meth->isCustomizable = true; LMI->isCustomizable = true; } } vmkit::VmkitModule::unprotectIR(); return func; }
void BytecodeTranslatorVisitor::declareFunction(AstFunction* f) { if (isNative(f)) { processNativeCallNode(f); return; } BytecodeFunction* bf = new BytecodeFunction(f); code()->addFunction(bf); f->setInfo(bf); }
void QQuickMenuBar::setNative(bool native) { bool wasNative = isNative(); if (native) { if (!m_platformMenuBar) { m_platformMenuBar = QGuiApplicationPrivate::platformTheme()->createPlatformMenuBar(); if (m_platformMenuBar) { m_platformMenuBar->handleReparent(m_parentWindow); foreach (QQuickMenu *menu, m_menus) m_platformMenuBar->insertMenu(menu->platformMenu(), 0 /* append */); } } } else { if (m_platformMenuBar) { foreach (QQuickMenu *menu, m_menus) m_platformMenuBar->removeMenu(menu->platformMenu()); } delete m_platformMenuBar; m_platformMenuBar = 0; } if (isNative() != wasNative) emit nativeChanged(); }
TER Taker::transferXRP ( AccountID const& from, AccountID const& to, STAmount const& amount) { if (!isNative (amount)) Throw<std::logic_error> ("Using transferXRP with IOU"); if (from == to) return tesSUCCESS; // Transferring zero is equivalent to not doing a transfer if (amount == zero) return tesSUCCESS; return ripple::transferXRP (view_, from, to, amount, journal_); }
void BytecodeTranslatorVisitor::visitCallNode(CallNode* node) { onVisitNode(node); AstFunction* f = scope()->lookupFunction(node->name()); if (!f) ERROR("Unknown function " + f->name()); checkSignature(node, f); for (uint16_t i = 0; i < node->parametersNumber(); i++) visitTyped(node->parameterAt(i), f->parameterType(i)); if (isNative(f)) EMIT(BC_CALLNATIVE); else EMIT(BC_CALL); EMIT_ID(getFunctionId(f)); pushType(f->returnType()); }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- std::vector<QString> RigNNCData::availableProperties(NNCResultType resultType) const { std::vector<QString> properties; for (auto it : m_connectionResults) { if (resultType == NNC_STATIC && it.second.size() == 1 && it.second[0].size() > 0 && isNative(it.first)) { properties.push_back(it.first); } else if (resultType == NNC_DYNAMIC && it.second.size() > 1 && it.second[0].size() > 0 && isNative(it.first)) { properties.push_back(it.first); } else if (resultType == NNC_GENERATED && !isNative(it.first)) { properties.push_back(it.first); } } return properties; }
void BytecodeTranslatorVisitor::visitAstFunction(AstFunction* f) { if (isNative(f)) return; onVisitNode(f->node()); std::stack<VarType> typeStack; CONTEXT(f, 0, f->scope(), &typeStack); for (uint32_t i = f->parametersNumber(); i --> 0;) { ensureIsParameterType(f->parameterType(i)); AstVar* x = scope()->lookupVariable(f->parameterName(i)); assert(x); variableInScope(x); EMIT_STORE(x); } visitTyped(f->node()->body(), VT_VOID); for (uint32_t i = 0; i < f->parametersNumber(); i++) variableOutOfScope(scope()->lookupVariable(f->parameterName(i))); if (f->name() == AstFunction::top_name) EMIT(BC_STOP); }
uint16_t BytecodeTranslatorVisitor::getFunctionId(AstFunction* f) const { if (isNative(f)) { return code()->getNativeId(f->name()); } return ((BytecodeFunction*) f->info())->id(); }
JSObject * GlobalObject::initFunctionAndObjectClasses(JSContext *cx) { JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment); JS_ASSERT(isNative()); /* * Calling a function from a cleared global triggers this (yeah, I know). * Uncomment this once bug 470510 is fixed (if that bug doesn't remove * isCleared entirely). */ // JS_ASSERT(!isCleared()); /* If cx has no global object, make this the global object. */ if (!cx->globalObject) JS_SetGlobalObject(cx, this); /* * Create |Object.prototype| first, mirroring CreateBlankProto but for the * prototype of the created object. */ JSObject *objectProto = NewObjectWithGivenProto(cx, &ObjectClass, NULL, this); if (!objectProto || !objectProto->setSingletonType(cx)) return NULL; /* * The default 'new' type of Object.prototype is required by type inference * to have unknown properties, to simplify handling of e.g. heterogenous * objects in JSON and script literals. */ if (!objectProto->setNewTypeUnknown(cx)) return NULL; /* Create |Function.prototype| next so we can create other functions. */ JSFunction *functionProto; { JSObject *proto = NewObjectWithGivenProto(cx, &FunctionClass, objectProto, this); if (!proto) return NULL; /* * Bizarrely, |Function.prototype| must be an interpreted function, so * give it the guts to be one. */ functionProto = js_NewFunction(cx, proto, NULL, 0, JSFUN_INTERPRETED, this, NULL); if (!functionProto) return NULL; JS_ASSERT(proto == functionProto); functionProto->flags |= JSFUN_PROTOTYPE; JSScript *script = JSScript::NewScript(cx, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, JSVERSION_DEFAULT); if (!script) return NULL; script->noScriptRval = true; script->code[0] = JSOP_STOP; script->code[1] = SRC_NULL; functionProto->initScript(script); functionProto->getType(cx)->interpretedFunction = functionProto; script->setFunction(functionProto); if (!proto->setSingletonType(cx)) return NULL; /* * The default 'new' type of Function.prototype is required by type * inference to have unknown properties, to simplify handling of e.g. * CloneFunctionObject. */ if (!proto->setNewTypeUnknown(cx)) return NULL; } /* Create the Object function now that we have a [[Prototype]] for it. */ jsid objectId = ATOM_TO_JSID(CLASS_ATOM(cx, Object)); JSFunction *objectCtor; { JSObject *ctor = NewObjectWithGivenProto(cx, &FunctionClass, functionProto, this); if (!ctor) return NULL; objectCtor = js_NewFunction(cx, ctor, js_Object, 1, JSFUN_CONSTRUCTOR, this, JSID_TO_ATOM(objectId)); if (!objectCtor) return NULL; JS_ASSERT(ctor == objectCtor); objectCtor->setConstructorClass(&ObjectClass); } /* * Install |Object| and |Object.prototype| for the benefit of subsequent * code that looks for them. */ setObjectClassDetails(objectCtor, objectProto); /* Create |Function| so it and |Function.prototype| can be installed. */ jsid functionId = ATOM_TO_JSID(CLASS_ATOM(cx, Function)); JSFunction *functionCtor; { JSObject *ctor = NewObjectWithGivenProto(cx, &FunctionClass, functionProto, this); if (!ctor) return NULL; functionCtor = js_NewFunction(cx, ctor, Function, 1, JSFUN_CONSTRUCTOR, this, JSID_TO_ATOM(functionId)); if (!functionCtor) return NULL; JS_ASSERT(ctor == functionCtor); functionCtor->setConstructorClass(&FunctionClass); } /* * Install |Function| and |Function.prototype| so that we can freely create * functions and objects without special effort. */ setFunctionClassDetails(functionCtor, functionProto); /* * The hard part's done: now go back and add all the properties these * primordial values have. */ if (!LinkConstructorAndPrototype(cx, objectCtor, objectProto) || !DefinePropertiesAndBrand(cx, objectProto, object_props, object_methods) || !DefinePropertiesAndBrand(cx, objectCtor, NULL, object_static_methods) || !LinkConstructorAndPrototype(cx, functionCtor, functionProto) || !DefinePropertiesAndBrand(cx, functionProto, NULL, function_methods) || !DefinePropertiesAndBrand(cx, functionCtor, NULL, NULL)) { return NULL; } /* Add the global Function and Object properties now. */ if (!addDataProperty(cx, objectId, JSProto_Object + JSProto_LIMIT * 2, 0)) return NULL; if (!addDataProperty(cx, functionId, JSProto_Function + JSProto_LIMIT * 2, 0)) return NULL; /* Heavy lifting done, but lingering tasks remain. */ /* ES5 15.1.2.1. */ jsid id = ATOM_TO_JSID(cx->runtime->atomState.evalAtom); JSObject *evalobj = js_DefineFunction(cx, this, id, eval, 1, JSFUN_STUB_GSOPS); if (!evalobj) return NULL; setOriginalEval(evalobj); /* ES5 13.2.3: Construct the unique [[ThrowTypeError]] function object. */ JSFunction *throwTypeError = js_NewFunction(cx, NULL, ThrowTypeError, 0, 0, this, NULL); if (!throwTypeError) return NULL; AutoIdVector ids(cx); if (!throwTypeError->preventExtensions(cx, &ids)) return NULL; setThrowTypeError(throwTypeError); /* * The global object should have |Object.prototype| as its [[Prototype]]. * Eventually we'd like to have standard classes be there from the start, * and thus we would know we were always setting what had previously been a * null [[Prototype]], but right now some code assumes it can set the * [[Prototype]] before standard classes have been initialized. For now, * only set the [[Prototype]] if it hasn't already been set. */ if (shouldSplicePrototype(cx) && !splicePrototype(cx, objectProto)) return NULL; /* * Notify any debuggers about the creation of the script for * |Function.prototype| -- after all initialization, for simplicity. */ js_CallNewScriptHook(cx, functionProto->script(), functionProto); return functionProto; }
void MethodInfo::verify(Toplevel *toplevel, AbcEnv* abc_env) { AvmAssert(declaringTraits()->isResolved()); resolveSignature(toplevel); AvmCore* core = this->pool()->core; if (isNative()) { union { GprMethodProc implGPR; AvmThunkNativeThunker thunker; AvmThunkNativeThunkerN thunkerN; } u; #ifdef DEBUGGER if (core->debugger()) { MethodSignaturep ms = getMethodSignature(); if (ms->returnTraitsBT() == BUILTIN_number) u.thunkerN = MethodInfo::debugEnterExitWrapperN; else u.thunker = MethodInfo::debugEnterExitWrapper32; } else #endif { u.thunker = this->thunker(); } this->setNativeImpl(u.implGPR); } else { #ifdef DEBUGGER // just a fake CallStackNode here, so that if we throw a verify error, // we get a stack trace with the method being verified as its top entry. CallStackNode callStackNode(this); #endif /* DEBUGGER */ PERFM_NTPROF("verify-ticks"); CodeWriter* coder = NULL; Verifier verifier(this, toplevel, abc_env); /* These "buf" declarations are an unfortunate but expedient hack: the existing CodeWriter classes (eg CodegenLIR, etc) have historically always been stack-allocated, thus they have no WB protection on member fields. Recent changes were made to allow for explicit cleanup() of them in the event of exception, but there was a latent bug waiting to happen: the actual automatic var was going out of scope, but still being referenced (via the 'coder' pointer) in the exception handler, but the area being pointed to may or may not still be valid. The ideal fix for this would simply be to heap-allocate the CodeWriters, but that would require going thru the existing code carefully and inserting WB where appropriate. Instead, this "expedient" hack uses placement new to ensure the memory stays valid into the exception handler. Note: the lack of a call to the dtor of the CodeWriter(s) is not an oversight. Calling cleanup() on coder is equivalent to running the dtor for all of the CodeWriters here. Note: allocated using arrays of intptr_t (rather than char) to ensure alignment is acceptable. */ #define MAKE_BUF(name, type) \ intptr_t name[(sizeof(type)+sizeof(intptr_t)-1)/sizeof(intptr_t)] #if defined FEATURE_NANOJIT MAKE_BUF(jit_buf, CodegenLIR); #if defined AVMPLUS_WORD_CODE MAKE_BUF(teeWriter_buf, TeeWriter); #endif #ifdef FEATURE_CFGWRITER MAKE_BUF(cfg_buf, CFGWriter); #endif #endif #if defined AVMPLUS_WORD_CODE MAKE_BUF(translator_buf, WordcodeEmitter); #else MAKE_BUF(stubWriter_buf, CodeWriter); #endif TRY(core, kCatchAction_Rethrow) { #if defined FEATURE_NANOJIT if ((core->IsJITEnabled()) && !suggestInterp()) { PERFM_NTPROF("verify & IR gen"); // note placement-new usage! CodegenLIR* jit = new(jit_buf) CodegenLIR(this); #if defined AVMPLUS_WORD_CODE WordcodeEmitter* translator = new(translator_buf) WordcodeEmitter(this, toplevel); TeeWriter* teeWriter = new(teeWriter_buf) TeeWriter(translator, jit); coder = teeWriter; #else coder = jit; #endif #ifdef FEATURE_CFGWRITER // analyze code and generate LIR CFGWriter* cfg = new(cfg_buf) CFGWriter(this, coder); coder = cfg; #endif verifier.verify(coder); PERFM_TPROF_END(); if (!jit->overflow) { // assembler LIR into native code jit->emitMD(); } // the MD buffer can overflow so we need to re-iterate // over the whole thing, since we aren't yet robust enough // to just rebuild the MD code. // mark it as interpreted and try to limp along if (jit->overflow) { if (core->JITMustSucceed()) { Exception* e = new (core->GetGC()) Exception(core, core->newStringLatin1("JIT failed")->atom()); e->flags |= Exception::EXIT_EXCEPTION; core->throwException(e); } setInterpImpl(); } #ifdef AVMPLUS_WORD_CODE else { if (_abc.word_code.translated_code) { set_word_code(core->GetGC(), NULL); } if (_abc.word_code.exceptions) { _abc.word_code.exceptions = NULL; } } #endif } else { // NOTE copied below #if defined AVMPLUS_WORD_CODE WordcodeEmitter* translator = new(translator_buf) WordcodeEmitter(this, toplevel); coder = translator; #else CodeWriter* stubWriter = new(stubWriter_buf) CodeWriter(); coder = stubWriter; #endif verifier.verify(coder); // pass2 dataflow setInterpImpl(); // NOTE end copy } #else // FEATURE_NANOJIT // NOTE copied from above #if defined AVMPLUS_WORD_CODE WordcodeEmitter* translator = new(translator_buf) WordcodeEmitter(this, toplevel); coder = translator; #else CodeWriter* stubWriter = new(stubWriter_buf) CodeWriter(); coder = stubWriter; #endif verifier.verify(coder); // pass2 dataflow setInterpImpl(); // NOTE end copy #endif // FEATURE_NANOJIT if (coder) { coder->cleanup(); coder = NULL; } } CATCH (Exception *exception) { // clean up verifier verifier.~Verifier(); // call cleanup all the way down the chain // each stage calls cleanup on the next one if (coder) coder->cleanup(); // re-throw exception core->throwException(exception); } END_CATCH END_TRY PERFM_TPROF_END(); }
JSObject * GlobalObject::initFunctionAndObjectClasses(JSContext *cx) { Rooted<GlobalObject*> self(cx, this); JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment); JS_ASSERT(isNative()); /* * Calling a function from a cleared global triggers this (yeah, I know). * Uncomment this once bug 470510 is fixed (if that bug doesn't remove * isCleared entirely). */ // JS_ASSERT(!isCleared()); /* If cx has no global object, make this the global object. */ if (!cx->globalObject) JS_SetGlobalObject(cx, self); RootedObject objectProto(cx); /* * Create |Object.prototype| first, mirroring CreateBlankProto but for the * prototype of the created object. */ objectProto = NewObjectWithGivenProto(cx, &ObjectClass, NULL, self); if (!objectProto || !objectProto->setSingletonType(cx)) return NULL; /* * The default 'new' type of Object.prototype is required by type inference * to have unknown properties, to simplify handling of e.g. heterogenous * objects in JSON and script literals. */ if (!objectProto->setNewTypeUnknown(cx)) return NULL; /* Create |Function.prototype| next so we can create other functions. */ RootedFunction functionProto(cx); { JSObject *functionProto_ = NewObjectWithGivenProto(cx, &FunctionClass, objectProto, self); if (!functionProto_) return NULL; functionProto = functionProto_->toFunction(); /* * Bizarrely, |Function.prototype| must be an interpreted function, so * give it the guts to be one. */ JSObject *proto = js_NewFunction(cx, functionProto, NULL, 0, JSFUN_INTERPRETED, self, NULL); if (!proto) return NULL; JS_ASSERT(proto == functionProto); functionProto->flags |= JSFUN_PROTOTYPE; const char *rawSource = "() {\n}"; size_t sourceLen = strlen(rawSource); jschar *source = InflateString(cx, rawSource, &sourceLen); if (!source) return NULL; ScriptSource *ss = cx->new_<ScriptSource>(); if (!ss) { cx->free_(source); return NULL; } ScriptSourceHolder ssh(cx->runtime, ss); ss->setSource(source, sourceLen); CompileOptions options(cx); options.setNoScriptRval(true) .setVersion(JSVERSION_DEFAULT); Rooted<JSScript*> script(cx, JSScript::Create(cx, /* enclosingScope = */ NullPtr(), /* savedCallerFun = */ false, options, /* staticLevel = */ 0, ss, 0, ss->length())); if (!script || !JSScript::fullyInitTrivial(cx, script)) return NULL; functionProto->initScript(script); functionProto->getType(cx)->interpretedFunction = functionProto; script->setFunction(functionProto); if (!functionProto->setSingletonType(cx)) return NULL; /* * The default 'new' type of Function.prototype is required by type * inference to have unknown properties, to simplify handling of e.g. * CloneFunctionObject. */ if (!functionProto->setNewTypeUnknown(cx)) return NULL; } /* Create the Object function now that we have a [[Prototype]] for it. */ RootedFunction objectCtor(cx); { JSObject *ctor = NewObjectWithGivenProto(cx, &FunctionClass, functionProto, self); if (!ctor) return NULL; objectCtor = js_NewFunction(cx, ctor, js_Object, 1, JSFUN_CONSTRUCTOR, self, CLASS_NAME(cx, Object)); if (!objectCtor) return NULL; } /* * Install |Object| and |Object.prototype| for the benefit of subsequent * code that looks for them. */ self->setObjectClassDetails(objectCtor, objectProto); /* Create |Function| so it and |Function.prototype| can be installed. */ RootedFunction functionCtor(cx); { // Note that ctor is rooted purely for the JS_ASSERT at the end RootedObject ctor(cx, NewObjectWithGivenProto(cx, &FunctionClass, functionProto, self)); if (!ctor) return NULL; functionCtor = js_NewFunction(cx, ctor, Function, 1, JSFUN_CONSTRUCTOR, self, CLASS_NAME(cx, Function)); if (!functionCtor) return NULL; JS_ASSERT(ctor == functionCtor); } /* * Install |Function| and |Function.prototype| so that we can freely create * functions and objects without special effort. */ self->setFunctionClassDetails(functionCtor, functionProto); /* * The hard part's done: now go back and add all the properties these * primordial values have. */ if (!LinkConstructorAndPrototype(cx, objectCtor, objectProto) || !DefinePropertiesAndBrand(cx, objectProto, NULL, object_methods)) { return NULL; } /* * Add an Object.prototype.__proto__ accessor property to implement that * extension (if it's actually enabled). Cache the getter for this * function so that cross-compartment [[Prototype]]-getting is implemented * in one place. */ Rooted<JSFunction*> getter(cx, js_NewFunction(cx, NULL, ProtoGetter, 0, 0, self, NULL)); if (!getter) return NULL; #if JS_HAS_OBJ_PROTO_PROP Rooted<JSFunction*> setter(cx, js_NewFunction(cx, NULL, ProtoSetter, 0, 0, self, NULL)); if (!setter) return NULL; RootedValue undefinedValue(cx, UndefinedValue()); if (!objectProto->defineProperty(cx, cx->runtime->atomState.protoAtom, undefinedValue, JS_DATA_TO_FUNC_PTR(PropertyOp, getter.get()), JS_DATA_TO_FUNC_PTR(StrictPropertyOp, setter.get()), JSPROP_GETTER | JSPROP_SETTER | JSPROP_SHARED)) { return NULL; } #endif /* JS_HAS_OBJ_PROTO_PROP */ self->setProtoGetter(getter); if (!DefinePropertiesAndBrand(cx, objectCtor, NULL, object_static_methods) || !LinkConstructorAndPrototype(cx, functionCtor, functionProto) || !DefinePropertiesAndBrand(cx, functionProto, NULL, function_methods) || !DefinePropertiesAndBrand(cx, functionCtor, NULL, NULL)) { return NULL; } /* Add the global Function and Object properties now. */ jsid objectId = NameToId(CLASS_NAME(cx, Object)); if (!self->addDataProperty(cx, objectId, JSProto_Object + JSProto_LIMIT * 2, 0)) return NULL; jsid functionId = NameToId(CLASS_NAME(cx, Function)); if (!self->addDataProperty(cx, functionId, JSProto_Function + JSProto_LIMIT * 2, 0)) return NULL; /* Heavy lifting done, but lingering tasks remain. */ /* ES5 15.1.2.1. */ RootedId id(cx, NameToId(cx->runtime->atomState.evalAtom)); JSObject *evalobj = js_DefineFunction(cx, self, id, IndirectEval, 1, JSFUN_STUB_GSOPS); if (!evalobj) return NULL; self->setOriginalEval(evalobj); /* ES5 13.2.3: Construct the unique [[ThrowTypeError]] function object. */ RootedFunction throwTypeError(cx, js_NewFunction(cx, NULL, ThrowTypeError, 0, 0, self, NULL)); if (!throwTypeError) return NULL; if (!throwTypeError->preventExtensions(cx)) return NULL; self->setThrowTypeError(throwTypeError); RootedObject intrinsicsHolder(cx, JS_NewObject(cx, NULL, NULL, self)); if (!intrinsicsHolder) return NULL; self->setIntrinsicsHolder(intrinsicsHolder); if (!JS_DefineFunctions(cx, intrinsicsHolder, intrinsic_functions)) return NULL; /* * The global object should have |Object.prototype| as its [[Prototype]]. * Eventually we'd like to have standard classes be there from the start, * and thus we would know we were always setting what had previously been a * null [[Prototype]], but right now some code assumes it can set the * [[Prototype]] before standard classes have been initialized. For now, * only set the [[Prototype]] if it hasn't already been set. */ if (self->shouldSplicePrototype(cx) && !self->splicePrototype(cx, objectProto)) return NULL; /* * Notify any debuggers about the creation of the script for * |Function.prototype| -- after all initialization, for simplicity. */ js_CallNewScriptHook(cx, functionProto->script(), functionProto); return functionProto; }
void cpuColorSpinorField::create(const QudaFieldCreate create) { // these need to be reset to ensure no ghost zones for the cpu // fields since we can't determine during the parent's constructor // whether the field is a cpu or cuda field // set this again here. this is a hack since we can determine we // have a cpu or cuda field in ColorSpinorField::create(), which // means a ghost zone is set. So we unset it here. This will be // fixed when clean up the ghost code with the peer-2-peer branch bytes = length * precision; if (isNative()) bytes = (siteSubset == QUDA_FULL_SITE_SUBSET && fieldOrder != QUDA_QDPJIT_FIELD_ORDER) ? 2*ALIGNMENT_ADJUST(bytes/2) : ALIGNMENT_ADJUST(bytes); if (pad != 0) errorQuda("Non-zero pad not supported"); if (precision == QUDA_HALF_PRECISION) errorQuda("Half precision not supported"); if (fieldOrder != QUDA_SPACE_COLOR_SPIN_FIELD_ORDER && fieldOrder != QUDA_SPACE_SPIN_COLOR_FIELD_ORDER && fieldOrder != QUDA_QOP_DOMAIN_WALL_FIELD_ORDER && fieldOrder != QUDA_QDPJIT_FIELD_ORDER && fieldOrder != QUDA_PADDED_SPACE_SPIN_COLOR_FIELD_ORDER) { errorQuda("Field order %d not supported", fieldOrder); } if (create != QUDA_REFERENCE_FIELD_CREATE) { // array of 4-d fields if (fieldOrder == QUDA_QOP_DOMAIN_WALL_FIELD_ORDER) { int Ls = x[nDim-1]; v = (void**)safe_malloc(Ls * sizeof(void*)); for (int i=0; i<Ls; i++) ((void**)v)[i] = safe_malloc(bytes / Ls); } else { v = safe_malloc(bytes); } init = true; } if (siteSubset == QUDA_FULL_SITE_SUBSET && fieldOrder != QUDA_QDPJIT_FIELD_ORDER) { ColorSpinorParam param(*this); param.siteSubset = QUDA_PARITY_SITE_SUBSET; param.nDim = nDim; memcpy(param.x, x, nDim*sizeof(int)); param.x[0] /= 2; param.create = QUDA_REFERENCE_FIELD_CREATE; param.v = v; param.norm = norm; param.is_composite = false; param.composite_dim = 0; param.is_component = composite_descr.is_component; param.component_id = composite_descr.id; even = new cpuColorSpinorField(*this, param); odd = new cpuColorSpinorField(*this, param); // need this hackery for the moment (need to locate the odd pointers half way into the full field) (dynamic_cast<cpuColorSpinorField*>(odd))->v = (void*)((char*)v + bytes/2); if (precision == QUDA_HALF_PRECISION) (dynamic_cast<cpuColorSpinorField*>(odd))->norm = (void*)((char*)norm + norm_bytes/2); if (bytes != 2*even->Bytes() || bytes != 2*odd->Bytes()) errorQuda("dual-parity fields should have double the size of a single-parity field (%lu,%lu,%lu)\n", bytes, even->Bytes(), odd->Bytes()); } }