-
Notifications
You must be signed in to change notification settings - Fork 3
/
HashMapParser.hx
41 lines (35 loc) · 1.13 KB
/
HashMapParser.hx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package hex.compiletime.flow.parser.custom;
/**
* ...
* @author Francis Bourre
*/
#if macro
import haxe.macro.*;
import hex.compiletime.flow.parser.ExpressionParser;
import hex.core.ContextTypeList;
import hex.vo.ConstructorVO;
using hex.error.Error;
class HashMapParser
{
/** @private */ function new() throw new PrivateConstructorException();
static var logger = hex.log.LogManager.LogManager.getLoggerByClass( HashMapParser );
public static function parse( parser : ExpressionParser, constructorVO : ConstructorVO, params : Array<Expr>, expr : Expr ) : ConstructorVO
{
if ( params.length > 0 )
{
switch( params[ 0 ].expr )
{
case EArrayDecl( values ):
constructorVO.type = ContextTypeList.HASHMAP;
constructorVO.fqcn = ExprTools.toString( expr ).split( 'new ' )[ 1 ].split( '(' )[ 0 ];
constructorVO.arguments = values.map( function(e) return parser.parseMapArgument( parser, constructorVO.ID, e ) );
case wtf:
logger.error( wtf );
haxe.macro.Context.error( 'HashMapParser fails', constructorVO.filePosition );
}
}
constructorVO.filePosition = expr.pos;
return constructorVO;
}
}
#end