Mercurial > projects > ddmd
comparison dmd/expression/Util.d @ 53:a8b50ff7f201
ForeachStatement.syntaxCopy
SliceExp.syntaxCopy
AnonDeclaration.syntaxCopy
SwitchStatement.syntaxCopy
CaseStatement.syntaxCopy
BreakStatement.syntaxCopy
ThrowStatement.syntaxCopy
NewExp.syntaxCopy
DefaultStatement.syntaxCopy
AssertExp.syntaxCopy
ClassDeclaration.syntaxCopy
TypeTypedef.constConv
eval_builtin
ComplexExp.isConst
DVCondition.syntaxCopy
OrExp.getIntRange
AndExp.getIntRange
getMask
IntegerExp.getIntRange
Type.sizemask
CastExp.getIntRange
Expression.getIntRange
author | korDen |
---|---|
date | Sat, 21 Aug 2010 12:15:47 +0400 |
parents | ddae60498573 |
children | 3adbb28755e8 |
comparison
equal
deleted
inserted
replaced
52:69d078c417c6 | 53:a8b50ff7f201 |
---|---|
1 module dmd.expression.Util; | 1 module dmd.expression.Util; |
2 | 2 |
3 import dmd.Expression; | 3 import dmd.Expression; |
4 import dmd.Loc; | 4 import dmd.Loc; |
5 import dmd.BUILTIN; | 5 import dmd.RealExp; |
6 import dmd.Scope; | 6 import dmd.Scope; |
7 import dmd.FuncExp; | 7 import dmd.FuncExp; |
8 import dmd.DelegateExp; | 8 import dmd.DelegateExp; |
9 import dmd.LINK; | 9 import dmd.LINK; |
10 import dmd.NullExp; | 10 import dmd.NullExp; |
32 import dmd.DotIdExp; | 32 import dmd.DotIdExp; |
33 import dmd.DotVarExp; | 33 import dmd.DotVarExp; |
34 import dmd.CallExp; | 34 import dmd.CallExp; |
35 import dmd.TY; | 35 import dmd.TY; |
36 import dmd.MATCH; | 36 import dmd.MATCH; |
37 import dmd.BUILTIN; | |
37 import dmd.TypeFunction; | 38 import dmd.TypeFunction; |
38 import dmd.declaration.Match; | 39 import dmd.declaration.Match; |
39 import dmd.ArrayTypes; | 40 import dmd.ArrayTypes; |
40 import dmd.Declaration; | 41 import dmd.Declaration; |
41 import dmd.FuncAliasDeclaration; | 42 import dmd.FuncAliasDeclaration; |
943 /************************************** | 944 /************************************** |
944 * Evaluate builtin function. | 945 * Evaluate builtin function. |
945 * Return result: null if cannot evaluate it. | 946 * Return result: null if cannot evaluate it. |
946 */ | 947 */ |
947 | 948 |
949 extern(C) extern real sinl(real); | |
950 extern(C) extern real cosl(real); | |
951 extern(C) extern real tanl(real); | |
952 extern(C) extern real sqrtl(real); | |
953 extern(C) extern real fabsl(real); | |
954 | |
948 Expression eval_builtin(BUILTIN builtin, Expressions arguments) | 955 Expression eval_builtin(BUILTIN builtin, Expressions arguments) |
949 { | 956 { |
950 assert(false); | 957 assert(arguments && arguments.dim); |
958 Expression arg0 = cast(Expression)arguments.data[0]; | |
959 Expression e = null; | |
960 switch (builtin) | |
961 { | |
962 case BUILTINsin: | |
963 if (arg0.op == TOKfloat64) | |
964 e = new RealExp(Loc(0), sinl(arg0.toReal()), arg0.type); | |
965 break; | |
966 | |
967 case BUILTINcos: | |
968 if (arg0.op == TOKfloat64) | |
969 e = new RealExp(Loc(0), cosl(arg0.toReal()), arg0.type); | |
970 break; | |
971 | |
972 case BUILTINtan: | |
973 if (arg0.op == TOKfloat64) | |
974 e = new RealExp(Loc(0), tanl(arg0.toReal()), arg0.type); | |
975 break; | |
976 | |
977 case BUILTINsqrt: | |
978 if (arg0.op == TOKfloat64) | |
979 e = new RealExp(Loc(0), sqrtl(arg0.toReal()), arg0.type); | |
980 break; | |
981 | |
982 case BUILTINfabs: | |
983 if (arg0.op == TOKfloat64) | |
984 e = new RealExp(Loc(0), fabsl(arg0.toReal()), arg0.type); | |
985 break; | |
986 } | |
987 return e; | |
951 } | 988 } |
952 | 989 |
953 Expression fromConstInitializer(int result, Expression e1) | 990 Expression fromConstInitializer(int result, Expression e1) |
954 { | 991 { |
955 //printf("fromConstInitializer(result = %x, %s)\n", result, e1.toChars()); | 992 //printf("fromConstInitializer(result = %x, %s)\n", result, e1.toChars()); |
1378 expToCBuffer(buf, hgs, arg, PREC.PREC_assign); | 1415 expToCBuffer(buf, hgs, arg, PREC.PREC_assign); |
1379 } | 1416 } |
1380 } | 1417 } |
1381 } | 1418 } |
1382 } | 1419 } |
1420 | |
1421 ulong getMask(ulong v) | |
1422 { | |
1423 ulong u = 0; | |
1424 if (v >= 0x80) | |
1425 u = 0xFF; | |
1426 while (u < v) | |
1427 u = (u << 1) | 1; | |
1428 return u; | |
1429 } |