rt/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethod.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Wed, 07 May 2014 11:05:07 +0200
branchclosure
changeset 1545 50991eae72d4
parent 1473 484248c9c1d6
child 1787 ea12a3bb4b33
permissions -rw-r--r--
Testing behavior of second constructor on the stack
jaroslav@106
     1
/**
jaroslav@106
     2
 * Back 2 Browser Bytecode Translator
jaroslav@106
     3
 * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
jaroslav@106
     4
 *
jaroslav@106
     5
 * This program is free software: you can redistribute it and/or modify
jaroslav@106
     6
 * it under the terms of the GNU General Public License as published by
jaroslav@106
     7
 * the Free Software Foundation, version 2 of the License.
jaroslav@106
     8
 *
jaroslav@106
     9
 * This program is distributed in the hope that it will be useful,
jaroslav@106
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
jaroslav@106
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
jaroslav@106
    12
 * GNU General Public License for more details.
jaroslav@106
    13
 *
jaroslav@106
    14
 * You should have received a copy of the GNU General Public License
jaroslav@106
    15
 * along with this program. Look for COPYING file in the top folder.
jaroslav@106
    16
 * If not, see http://opensource.org/licenses/GPL-2.0.
jaroslav@106
    17
 */
jaroslav@22
    18
package org.apidesign.vm4brwsr;
jaroslav@0
    19
jaroslav@94
    20
import org.apidesign.bck2brwsr.core.JavaScriptBody;
jaroslav@94
    21
jaroslav@0
    22
/**
jaroslav@0
    23
 *
jaroslav@0
    24
 * @author Jaroslav Tulach <jtulach@netbeans.org>
jaroslav@0
    25
 */
jaroslav@0
    26
public class StaticMethod {
jaroslav@1472
    27
    public static final int MISSING_CONSTANT = 1;
jaroslav@9
    28
    private static int cnt;
jaroslav@173
    29
    private static Object NULL;
jaroslav@48
    30
jaroslav@48
    31
    public static int minusOne() {
jaroslav@48
    32
        return -1;
jaroslav@48
    33
    }
jaroslav@9
    34
    
jaroslav@46
    35
    public static Object none(int x, int y) {
jaroslav@46
    36
        Object toRet = null;
jaroslav@46
    37
        for (int i = x; i < y; i++) {
jaroslav@46
    38
            if (i == 2) {
jaroslav@46
    39
                toRet = null;
jaroslav@46
    40
            } else {
jaroslav@46
    41
                toRet = new Object();
jaroslav@46
    42
            }
jaroslav@46
    43
        }
jaroslav@46
    44
        return toRet;
jaroslav@46
    45
    }
jaroslav@46
    46
    
jaroslav@173
    47
    public static boolean isNull() {
jaroslav@173
    48
        return NULL == null;
jaroslav@173
    49
    }
jaroslav@173
    50
    
jaroslav@0
    51
    public static int sum(int x, int y) {
jaroslav@0
    52
        return x + y;
jaroslav@0
    53
    }
jaroslav@1
    54
    public static float power(float x) {
jaroslav@1
    55
        return x * x;
jaroslav@1
    56
    }
jaroslav@2
    57
    public static double minus(double x, long y) {
jaroslav@2
    58
        return x - y;
jaroslav@2
    59
    }
jaroslav@3
    60
    public static int div(byte c, double d) {
jaroslav@3
    61
        return (int)(d / c);
jaroslav@3
    62
    }
jaroslav@3
    63
    public static int mix(int a, long b, byte c, double d) {
jaroslav@3
    64
        return (int)((b / a + c) * d);
jaroslav@3
    65
    }
jaroslav@6
    66
    public static long xor(int a, long b) {
jaroslav@6
    67
        return a ^ b;
jaroslav@6
    68
    }
jaroslav@7
    69
    public static long orOrAnd(boolean doOr, int a, int b) {
jaroslav@7
    70
        return doOr ? a | b : a & b;
jaroslav@7
    71
    }
jaroslav@93
    72
    public static int shiftLeft(int what, int much) {
jaroslav@93
    73
        return what << much;
jaroslav@93
    74
    }
jaroslav@93
    75
    public static int shiftArithmRight(int what, int much, boolean signed) {
jaroslav@93
    76
        if (signed) {
jaroslav@93
    77
            return what >> much;
jaroslav@93
    78
        } else {
jaroslav@93
    79
            return what >>> much;
jaroslav@93
    80
        }
jaroslav@93
    81
    }
jaroslav@4
    82
    public static long factRec(int n) {
jaroslav@4
    83
        if (n <= 1) {
jaroslav@4
    84
            return 1;
jaroslav@4
    85
        } else {
jaroslav@1472
    86
            return n * factRec(n - MISSING_CONSTANT);
jaroslav@4
    87
        }
jaroslav@4
    88
    }
jaroslav@5
    89
    public static long factIter(int n) {
jaroslav@5
    90
        long res = 1;
jaroslav@5
    91
        for (int i = 2; i <= n; i++) {
jaroslav@5
    92
            res *= i;
jaroslav@5
    93
        }
jaroslav@5
    94
        return res;
jaroslav@5
    95
    }
jaroslav@9
    96
    public static int inc4() {
jaroslav@9
    97
        cnt++;
jaroslav@9
    98
        cnt+=2;
jaroslav@9
    99
        cnt++;
jaroslav@9
   100
        return cnt;
jaroslav@9
   101
    }
jaroslav@94
   102
    
jaroslav@1473
   103
    public static int helloWorldLength(String x) {
jaroslav@1473
   104
        return (StringSample.HELLO + x).length();
jaroslav@1473
   105
    }
jaroslav@1473
   106
    
jaroslav@94
   107
    @JavaScriptBody(
jtulach@161
   108
        args={"i","j"}, body="\n\r\treturn (i + j).toString();"
jaroslav@94
   109
    )
jaroslav@99
   110
    public static String i2s(int i, int j) {
jaroslav@94
   111
        throw new IllegalStateException();
jaroslav@94
   112
    }
jaroslav@97
   113
    
jaroslav@291
   114
    public static String castNull(boolean n) {
jaroslav@291
   115
        Object value = n ? null : "Ahoj";
jaroslav@291
   116
        return (String)value;
jaroslav@291
   117
    }
jaroslav@291
   118
    
jaroslav@115
   119
    public static String swtch(int what) {
jaroslav@115
   120
        switch (what) {
jaroslav@115
   121
            case 0: return "Jarda";
jaroslav@115
   122
            case 1: return "Darda";
jaroslav@115
   123
            case 2: return "Parda";
jaroslav@115
   124
            default: return "Marda";
jaroslav@115
   125
        }
jaroslav@115
   126
    }
jaroslav@115
   127
    public static String swtch2(int what) {
jaroslav@115
   128
        switch (what) {
jaroslav@115
   129
            case 0: return "Jarda";
jaroslav@115
   130
            case 11: return "Darda";
jaroslav@115
   131
            case 22: return "Parda";
jaroslav@115
   132
            default: return "Marda";
jaroslav@115
   133
        }
jaroslav@115
   134
    }
jaroslav@115
   135
    
jaroslav@1466
   136
    public static int castString(Object o) {
jaroslav@1466
   137
        return ((String)o).length();
jaroslav@1466
   138
    }
jaroslav@1466
   139
    
jaroslav@1467
   140
    public static int initInflater(int w, boolean nowrap) {
jaroslav@1467
   141
        Instance i = new Instance(w, 0.0);
jaroslav@1467
   142
        return i.sum(nowrap?-w:w, 1);
jaroslav@1467
   143
    }
jaroslav@1467
   144
    
jaroslav@1545
   145
    public static int intHolder() {
jaroslav@1545
   146
        return new IntHolder(new Integer(10)).i.intValue();
jaroslav@1545
   147
    }
jaroslav@1545
   148
jaroslav@1545
   149
    private static class IntHolder {
jaroslav@1545
   150
        Integer i;
jaroslav@1545
   151
jaroslav@1545
   152
        public IntHolder(Integer i) {
jaroslav@1545
   153
            this.i = i;
jaroslav@1545
   154
        }
jaroslav@1545
   155
    }
jaroslav@1545
   156
    
jaroslav@1468
   157
    public static String toStringArr() {
jaroslav@1468
   158
        class N implements Next {
jaroslav@1468
   159
            int idx = 0;
jaroslav@1468
   160
            
jaroslav@1468
   161
            @Override
jaroslav@1468
   162
            public boolean hasNext() {
jaroslav@1468
   163
                return idx < 5;
jaroslav@1468
   164
            }
jaroslav@1468
   165
jaroslav@1468
   166
            @Override
jaroslav@1468
   167
            public String next() {
jaroslav@1468
   168
                switch (idx++) {
jaroslav@1468
   169
                    case 0: return "Zero";
jaroslav@1468
   170
                    case 1: return "One";
jaroslav@1468
   171
                    case 2: return "Two";
jaroslav@1468
   172
                    case 3: return "Three";
jaroslav@1468
   173
                    case 4: return "Four";
jaroslav@1468
   174
                }
jaroslav@1468
   175
                throw new IllegalStateException();
jaroslav@1468
   176
            }
jaroslav@1468
   177
        }
jaroslav@1468
   178
        return toString(null, new N()).toString();
jaroslav@1468
   179
    }
jaroslav@1468
   180
    
jaroslav@1468
   181
    static String toString(Object thiz, Next it) {
jaroslav@1468
   182
        if (!it.hasNext()) {
jaroslav@1468
   183
            return "[]";
jaroslav@1468
   184
        }
jaroslav@1468
   185
jaroslav@1468
   186
        StringBuilder sb = new StringBuilder();
jaroslav@1468
   187
        sb.append('[');
jaroslav@1468
   188
        for (;;) {
jaroslav@1468
   189
            String e = it.next();
jaroslav@1468
   190
            sb.append(e == thiz ? "(this Collection)" : e);
jaroslav@1468
   191
            if (!it.hasNext()) {
jaroslav@1468
   192
                return sb.append(']').toString();
jaroslav@1468
   193
            }
jaroslav@1468
   194
            sb.append(',').append(' ');
jaroslav@1468
   195
        }
jaroslav@1468
   196
    }
jaroslav@1468
   197
    
jaroslav@1468
   198
    static interface Next {
jaroslav@1468
   199
        boolean hasNext();
jaroslav@1468
   200
        String next();
jaroslav@1468
   201
    }
jaroslav@1468
   202
    
jaroslav@1468
   203
    
jaroslav@97
   204
    static {
jaroslav@97
   205
        // check order of initializers
jaroslav@97
   206
        StaticUse.NON_NULL.equals(new Object());
jaroslav@97
   207
    }
jaroslav@0
   208
}