Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(117)

Unified Diff: runtime/vm/parser.cc

Issue 99373002: Mark native functions when they are created. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/object_test.cc ('k') | runtime/vm/resolver.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/parser.cc
===================================================================
--- runtime/vm/parser.cc (revision 30796)
+++ runtime/vm/parser.cc (working copy)
@@ -525,6 +525,7 @@
has_var = false;
has_factory = false;
has_operator = false;
+ has_native = false;
metadata_pos = -1;
operator_token = Token::kILLEGAL;
type = NULL;
@@ -576,6 +577,7 @@
bool has_var;
bool has_factory;
bool has_operator;
+ bool has_native;
intptr_t metadata_pos;
Token::Kind operator_token;
const AbstractType* type;
@@ -1574,6 +1576,7 @@
/* is_const = */ false,
/* is_abstract = */ false,
/* is_external = */ false,
+ /* is_native = */ false,
current_class(),
parameter.name_pos));
signature_function.set_result_type(result_type);
@@ -3274,6 +3277,7 @@
ParseNativeDeclaration();
method_end_pos = TokenPos();
ExpectSemicolon();
+ method->has_native = true;
} else {
// We haven't found a method body. Issue error if one is required.
const bool must_have_body =
@@ -3329,6 +3333,7 @@
method->has_const,
method->has_abstract,
method->has_external,
+ method->has_native,
current_class(),
method->decl_begin_pos));
func.set_result_type(*method->type);
@@ -3446,6 +3451,7 @@
field->has_const,
/* is_abstract = */ false,
/* is_external = */ false,
+ /* is_native = */ false,
current_class(),
field->name_pos);
getter.set_result_type(*field->type);
@@ -3468,6 +3474,7 @@
field->has_final,
/* is_abstract = */ false,
/* is_external = */ false,
+ /* is_native = */ false,
current_class(),
field->name_pos);
ParamList params;
@@ -3484,6 +3491,7 @@
field->has_final,
/* is_abstract = */ false,
/* is_external = */ false,
+ /* is_native = */ false,
current_class(),
field->name_pos);
ParamList params;
@@ -4010,6 +4018,7 @@
/* is_const = */ false,
/* is_abstract = */ false,
/* is_external = */ false,
+ /* is_native = */ false,
cls,
cls.token_pos()));
ctor.set_end_token_pos(ctor.token_pos());
@@ -4238,6 +4247,7 @@
/* is_const = */ false,
/* is_abstract = */ false,
/* is_external = */ false,
+ /* is_native = */ false,
function_type_alias,
alias_name_pos));
signature_function.set_result_type(result_type);
@@ -4571,6 +4581,7 @@
is_const,
/* is_abstract = */ false,
/* is_external = */ false,
+ /* is_native = */ false,
current_class(),
name_pos);
getter.set_result_type(type);
@@ -4651,6 +4662,7 @@
ParseFormalParameterList(allow_explicit_default_values, false, &params);
intptr_t function_end_pos = function_pos;
+ bool is_native = false;
if (is_external) {
function_end_pos = TokenPos();
ExpectSemicolon();
@@ -4667,6 +4679,7 @@
ParseNativeDeclaration();
function_end_pos = TokenPos();
ExpectSemicolon();
+ is_native = true;
} else {
ErrorMsg("function block expected");
}
@@ -4677,6 +4690,7 @@
/* is_const = */ false,
/* is_abstract = */ false,
is_external,
+ is_native,
current_class(),
decl_begin_pos));
func.set_result_type(result_type);
@@ -4781,6 +4795,7 @@
}
intptr_t accessor_end_pos = accessor_pos;
+ bool is_native = false;
if (is_external) {
accessor_end_pos = TokenPos();
ExpectSemicolon();
@@ -4797,17 +4812,19 @@
ParseNativeDeclaration();
accessor_end_pos = TokenPos();
ExpectSemicolon();
+ is_native = true;
} else {
ErrorMsg("function block expected");
}
Function& func = Function::Handle(
Function::New(accessor_name,
- is_getter? RawFunction::kGetterFunction :
- RawFunction::kSetterFunction,
+ is_getter ? RawFunction::kGetterFunction :
+ RawFunction::kSetterFunction,
is_static,
/* is_const = */ false,
/* is_abstract = */ false,
is_external,
+ is_native,
current_class(),
decl_begin_pos));
func.set_result_type(result_type);
@@ -5287,7 +5304,7 @@
// Builds ReturnNode/NativeBodyNode for a native function.
void Parser::ParseNativeFunctionBlock(const ParamList* params,
const Function& func) {
- func.set_is_native(true);
+ ASSERT(func.is_native());
TRACE_PARSER("ParseNativeFunctionBlock");
const Class& cls = Class::Handle(func.Owner());
const Library& library = Library::Handle(cls.library());
« no previous file with comments | « runtime/vm/object_test.cc ('k') | runtime/vm/resolver.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698