本文整理汇总了C++中SourceCode::firstLine方法的典型用法代码示例。如果您正苦于以下问题:C++ SourceCode::firstLine方法的具体用法?C++ SourceCode::firstLine怎么用?C++ SourceCode::firstLine使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SourceCode
的用法示例。
在下文中一共展示了SourceCode::firstLine方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Base
UnlinkedFunctionExecutable::UnlinkedFunctionExecutable(VM* vm, Structure* structure, const SourceCode& source, RefPtr<SourceProvider>&& sourceOverride, FunctionBodyNode* node, UnlinkedFunctionKind kind)
: Base(*vm, structure)
, m_name(node->ident())
, m_inferredName(node->inferredName())
, m_parameters(node->parameters())
, m_sourceOverride(WTF::move(sourceOverride))
, m_firstLineOffset(node->firstLine() - source.firstLine())
, m_lineCount(node->lastLine() - node->firstLine())
, m_unlinkedFunctionNameStart(node->functionNameStart() - source.startOffset())
, m_unlinkedBodyStartColumn(node->startColumn())
, m_unlinkedBodyEndColumn(m_lineCount ? node->endColumn() : node->endColumn() - node->startColumn())
, m_startOffset(node->source().startOffset() - source.startOffset())
, m_sourceLength(node->source().length())
, m_parametersStartOffset(node->parametersStart())
, m_typeProfilingStartOffset(node->functionKeywordStart())
, m_typeProfilingEndOffset(node->startStartOffset() + node->source().length() - 1)
, m_features(0)
, m_isInStrictContext(node->isInStrictContext())
, m_hasCapturedVariables(false)
, m_isBuiltinFunction(kind == UnlinkedBuiltinFunction)
, m_constructorKind(static_cast<unsigned>(node->constructorKind()))
, m_functionMode(node->functionMode())
{
ASSERT(m_constructorKind == static_cast<unsigned>(node->constructorKind()));
}
示例2: setCodeStart
void Lexer<T>::setCode(const SourceCode& source, ParserArena* arena)
{
m_arena = &arena->identifierArena();
m_lineNumber = source.firstLine();
m_delimited = false;
m_lastToken = -1;
const StringImpl* sourceString = source.provider()->data();
if (sourceString)
setCodeStart(sourceString);
else
m_codeStart = 0;
m_source = &source;
m_code = m_codeStart + source.startOffset();
m_codeEnd = m_codeStart + source.endOffset();
m_error = false;
m_atLineStart = true;
m_lexErrorMessage = UString();
m_buffer8.reserveInitialCapacity(initialReadBufferCapacity);
m_buffer16.reserveInitialCapacity((m_codeEnd - m_code) / 2);
if (LIKELY(m_code < m_codeEnd))
m_current = *m_code;
else
m_current = -1;
ASSERT(currentOffset() == source.startOffset());
}
示例3: adoptPtr
PassOwnPtr<ScheduledAction> ScheduledAction::create(ExecState* exec, DOMWrapperWorld* isolatedWorld, ContentSecurityPolicy* policy)
{
JSValue v = exec->argument(0);
CallData callData;
CallType callType = getCallData(v, callData);
if (callType == CallTypeNone) {
if (policy && !policy->allowEval())
return nullptr;
UString string = v.toString(exec)->value(exec);
if (exec->hadException())
return nullptr;
return adoptPtr(new ScheduledAction(ustringToString(string), isolatedWorld));
}
// WebERA this calculates a unique indification of the called function scheduled in this action.
if (callType == CallTypeJS) {
const SourceCode source = callData.js.functionExecutable->source();
WTF::String url = WebCore::decodeURLEscapeSequences(WTF::String(source.provider()->url().utf8().data()));
uint calledLine = source.firstLine();
return adoptPtr(new ScheduledAction(exec, v, isolatedWorld, url.ascii().data(), calledLine));
}
return adoptPtr(new ScheduledAction(exec, v, isolatedWorld, "<native-function>", -1));
}
示例4: setCode
void Lexer::setCode(const SourceCode& source, ParserArena& arena)
{
m_arena = &arena.identifierArena();
m_lineNumber = source.firstLine();
m_delimited = false;
m_lastToken = -1;
const UChar* data = source.provider()->data();
m_source = &source;
m_codeStart = data;
m_code = data + source.startOffset();
m_codeEnd = data + source.endOffset();
m_error = false;
m_atLineStart = true;
// ECMA-262 calls for stripping all Cf characters, but we only strip BOM characters.
// See <https://bugs.webkit.org/show_bug.cgi?id=4931> for details.
if (source.provider()->hasBOMs()) {
for (const UChar* p = m_codeStart; p < m_codeEnd; ++p) {
if (UNLIKELY(*p == byteOrderMark)) {
copyCodeWithoutBOMs();
break;
}
}
}
// Read the first characters into the 4-character buffer.
shift4();
ASSERT(currentOffset() == source.startOffset());
}
示例5: Base
UnlinkedFunctionExecutable::UnlinkedFunctionExecutable(VM* vm, Structure* structure, const SourceCode& source, RefPtr<SourceProvider>&& sourceOverride, FunctionMetadataNode* node, UnlinkedFunctionKind kind, ConstructAbility constructAbility, VariableEnvironment& parentScopeTDZVariables, DerivedContextType derivedContextType)
: Base(*vm, structure)
, m_name(node->ident())
, m_inferredName(node->inferredName())
, m_sourceOverride(WTF::move(sourceOverride))
, m_firstLineOffset(node->firstLine() - source.firstLine())
, m_lineCount(node->lastLine() - node->firstLine())
, m_unlinkedFunctionNameStart(node->functionNameStart() - source.startOffset())
, m_unlinkedBodyStartColumn(node->startColumn())
, m_unlinkedBodyEndColumn(m_lineCount ? node->endColumn() : node->endColumn() - node->startColumn())
, m_startOffset(node->source().startOffset() - source.startOffset())
, m_sourceLength(node->source().length())
, m_parametersStartOffset(node->parametersStart())
, m_typeProfilingStartOffset(node->functionKeywordStart())
, m_typeProfilingEndOffset(node->startStartOffset() + node->source().length() - 1)
, m_parameterCount(node->parameterCount())
, m_parseMode(node->parseMode())
, m_features(0)
, m_isInStrictContext(node->isInStrictContext())
, m_hasCapturedVariables(false)
, m_isBuiltinFunction(kind == UnlinkedBuiltinFunction)
, m_constructAbility(static_cast<unsigned>(constructAbility))
, m_constructorKind(static_cast<unsigned>(node->constructorKind()))
, m_functionMode(node->functionMode())
, m_superBinding(static_cast<unsigned>(node->superBinding()))
, m_derivedContextType(static_cast<unsigned>(derivedContextType))
{
ASSERT(m_constructorKind == static_cast<unsigned>(node->constructorKind()));
m_parentScopeTDZVariables.swap(parentScopeTDZVariables);
}
示例6: setCode
void Lexer::setCode(const SourceCode& source, ParserArena& arena)
{
m_arena = &arena.identifierArena();
m_lineNumber = source.firstLine();
m_delimited = false;
m_lastToken = -1;
const UChar* data = source.provider()->data();
m_source = &source;
m_codeStart = data;
m_code = data + source.startOffset();
m_codeEnd = data + source.endOffset();
m_error = false;
m_atLineStart = true;
m_buffer8.reserveInitialCapacity(initialReadBufferCapacity);
m_buffer16.reserveInitialCapacity((m_codeEnd - m_code) / 2);
if (LIKELY(m_code < m_codeEnd))
m_current = *m_code;
else
m_current = -1;
ASSERT(currentOffset() == source.startOffset());
}
示例7: link
FunctionExecutable* UnlinkedFunctionExecutable::link(VM& vm, const SourceCode& ownerSource, int overrideLineNumber)
{
SourceCode source = m_sourceOverride ? SourceCode(m_sourceOverride) : ownerSource;
unsigned firstLine = source.firstLine() + m_firstLineOffset;
unsigned startOffset = source.startOffset() + m_startOffset;
// Adjust to one-based indexing.
bool startColumnIsOnFirstSourceLine = !m_firstLineOffset;
unsigned startColumn = m_unlinkedBodyStartColumn + (startColumnIsOnFirstSourceLine ? source.startColumn() : 1);
bool endColumnIsOnStartLine = !m_lineCount;
unsigned endColumn = m_unlinkedBodyEndColumn + (endColumnIsOnStartLine ? startColumn : 1);
SourceCode code(source.provider(), startOffset, startOffset + m_sourceLength, firstLine, startColumn);
FunctionExecutable* result = FunctionExecutable::create(vm, code, this, firstLine, firstLine + m_lineCount, startColumn, endColumn);
if (overrideLineNumber != -1)
result->setOverrideLineNumber(overrideLineNumber);
return result;
}
示例8: Base
UnlinkedFunctionExecutable::UnlinkedFunctionExecutable(JSGlobalData* globalData, Structure* structure, const SourceCode& source, FunctionBodyNode* node)
: Base(*globalData, structure)
, m_numCapturedVariables(node->capturedVariableCount())
, m_forceUsesArguments(node->usesArguments())
, m_isInStrictContext(node->isStrictMode())
, m_hasCapturedVariables(node->hasCapturedVariables())
, m_name(node->ident())
, m_inferredName(node->inferredName())
, m_parameters(node->parameters())
, m_firstLineOffset(node->firstLine() - source.firstLine())
, m_lineCount(node->lastLine() - node->firstLine())
, m_functionStartOffset(node->functionStart() - source.startOffset())
, m_startOffset(node->source().startOffset() - source.startOffset())
, m_sourceLength(node->source().length())
, m_features(node->features())
, m_functionNameIsInScopeToggle(node->functionNameIsInScopeToggle())
{
}
示例9: link
FunctionExecutable* UnlinkedFunctionExecutable::link(VM& vm, const SourceCode& ownerSource, Optional<int> overrideLineNumber, Intrinsic intrinsic)
{
SourceCode source = m_sourceOverride ? SourceCode(m_sourceOverride) : ownerSource;
unsigned firstLine = source.firstLine() + m_firstLineOffset;
unsigned startOffset = source.startOffset() + m_startOffset;
unsigned lineCount = m_lineCount;
// Adjust to one-based indexing.
bool startColumnIsOnFirstSourceLine = !m_firstLineOffset;
unsigned startColumn = m_unlinkedBodyStartColumn + (startColumnIsOnFirstSourceLine ? source.startColumn() : 1);
bool endColumnIsOnStartLine = !lineCount;
unsigned endColumn = m_unlinkedBodyEndColumn + (endColumnIsOnStartLine ? startColumn : 1);
SourceCode code(source.provider(), startOffset, startOffset + m_sourceLength, firstLine, startColumn);
FunctionOverrides::OverrideInfo overrideInfo;
bool hasFunctionOverride = false;
if (UNLIKELY(Options::functionOverrides())) {
hasFunctionOverride = FunctionOverrides::initializeOverrideFor(code, overrideInfo);
if (hasFunctionOverride) {
firstLine = overrideInfo.firstLine;
lineCount = overrideInfo.lineCount;
startColumn = overrideInfo.startColumn;
endColumn = overrideInfo.endColumn;
code = overrideInfo.sourceCode;
}
}
FunctionExecutable* result = FunctionExecutable::create(vm, code, this, firstLine, firstLine + lineCount, startColumn, endColumn, intrinsic);
if (overrideLineNumber)
result->setOverrideLineNumber(*overrideLineNumber);
if (UNLIKELY(hasFunctionOverride)) {
result->overrideParameterAndTypeProfilingStartEndOffsets(
overrideInfo.parametersStartOffset,
overrideInfo.typeProfilingStartOffset,
overrideInfo.typeProfilingEndOffset);
}
return result;
}
示例10: sourceParsed
void WebDebugListenerImpl::sourceParsed(ExecState* execState, const SourceCode& source, int errorLine, const UString& errorMsg)
{
if (m_listener && !m_inDebug) {
m_inDebug = true;
WebCore::String coreSourceURL = WebCore::ustringToString(source.provider()->url());
WebCore::Frame *frame = static_cast<WebCore::JSDOMWindow*>(execState->lexicalGlobalObject())->impl()->frame();
if (!(coreSourceURL.isNull() || coreSourceURL.isEmpty())) {
WebCore::KURL sourceURL(WebCore::ParsedURLString, coreSourceURL);
WebCore::KURL mappedURL;
if(WebCore::FrameLoaderClientApollo::mapFrameUrl(frame, sourceURL, &mappedURL)) {
coreSourceURL = mappedURL.string();
}
}
WebCore::String coreErrorMsg = WebCore::ustringToString(errorMsg);
WebCore::String coreSource(source.data(), source.length());
m_listener->m_pVTable->sourceParsed(m_listener, source.provider()->asID(), coreSourceURL.webString(), coreSource.webString(), source.firstLine(), errorLine, coreErrorMsg.webString());
m_inDebug = false;
}
}