@@ -11,12 +11,11 @@ import { TokenKeywordType, TokenOperatorType } from '../../lexer/tokenizer/type'
11
11
12
12
export function parserParseExtern ( parser : Parser , parent_block : AstBlock ) : AstExtern | undefined {
13
13
parser . expect ( TokenKeywordType . TOKEN_EXTERN ) ;
14
- console . log ( "===> extern" ) ;
15
14
let is_function : boolean = false ;
16
15
if ( parser . skip ( TokenKeywordType . TOKEN_FN ) ) {
17
16
is_function = true ;
18
17
}
19
- console . log ( parser . currentToken . isKeyword , parser . currentToken . isDefinedIdentifier ) ;
18
+
20
19
// if (parser.currentToken.isKeyword) {
21
20
// parser.pushError(parserMessageRenderer(parser.getLanguageId(), ParserMessageKeys.PARSER_FUNCTION_NAME_IS_NOT_VALID_IDENTIFIER));
22
21
// return undefined;
@@ -28,8 +27,6 @@ export function parserParseExtern(parser: Parser, parent_block: AstBlock): AstEx
28
27
// return undefined;
29
28
// }
30
29
31
- console . log ( "is function:" , is_function ) ;
32
-
33
30
let return_type : AstType | undefined = undefined ;
34
31
if ( is_function === false ) {
35
32
return_type = parseType ( parser ) ;
@@ -39,15 +36,15 @@ export function parserParseExtern(parser: Parser, parent_block: AstBlock): AstEx
39
36
}
40
37
}
41
38
39
+ // Eating function name
42
40
const name : string | undefined = parser . currentToken . data ?. getValueString ( ) ;
43
- console . log ( "extern name:" , name ) ;
44
41
if ( name === undefined ) {
45
42
parser . pushError ( parserMessageRenderer ( parser . getLanguageId ( ) , ParserMessageKeys . PARSER_FUNCTION_NAME_IS_NOT_VALID ) ) ;
46
43
return undefined ;
47
44
}
48
- // Eating function name
49
45
parser . next ( ) ;
50
46
47
+ // Parameters for function externs
51
48
let params : AstFunctionArgument [ ] | undefined = undefined ;
52
49
if ( is_function === true ) {
53
50
params = parserParseFunctionArguments ( parser ) ;
@@ -75,6 +72,11 @@ export function parserParseExtern(parser: Parser, parent_block: AstBlock): AstEx
75
72
}
76
73
parser . expect ( TokenKeywordType . TOKEN_IDENTIFIER ) ;
77
74
75
+ if ( return_type === undefined ) {
76
+ parser . pushError ( "Invalid data type as return type of extern" ) ;
77
+ return undefined ;
78
+ }
79
+
78
80
const ast : AstExtern = new AstExtern ( name , params , return_type , generate_name ) ;
79
81
return ast ;
80
82
} ;
0 commit comments