| /******************************************************************************* |
| * Copyright (c) 2009 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.cdt.core.parser.xlc.tests; |
| |
| import org.eclipse.cdt.core.dom.ast.IASTCompoundStatement; |
| import org.eclipse.cdt.core.dom.ast.IASTDeclaration; |
| import org.eclipse.cdt.core.dom.ast.IASTExpressionStatement; |
| import org.eclipse.cdt.core.dom.ast.IASTFunctionCallExpression; |
| import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition; |
| import org.eclipse.cdt.core.dom.ast.IASTIdExpression; |
| import org.eclipse.cdt.core.dom.ast.IASTName; |
| import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration; |
| import org.eclipse.cdt.core.dom.ast.IASTStatement; |
| import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; |
| |
| |
| public class VectorExtensionsTest extends XlcTestBase { |
| |
| public VectorExtensionsTest() { |
| } |
| |
| public VectorExtensionsTest(String name) { |
| super(name); |
| } |
| |
| |
| |
| public void testVector1() { |
| String code = |
| "int test() { \n" + |
| " vector unsigned int a = {1,2,3,4}; \n" + |
| " vector unsigned int b = {2,4,6,8}; \n" + |
| " vector unsigned int c = a + b; \n" + |
| " int e = b > a; \n" + |
| " int f = a[2]; \n" + |
| " vector unsigned int d = ++a; \n" + |
| "}\n"; |
| |
| parse(code, getCLanguage(), true); |
| parse(code, getCPPLanguage(), true); |
| } |
| |
| public void testVectorDeclarations() { |
| String code = |
| "vector unsigned char a; \n" + |
| "vector signed char b; \n" + |
| "vector bool char c; \n" + |
| "vector unsigned short d; \n" + |
| "vector unsigned short int e; \n" + |
| "vector signed short f; \n" + |
| "vector signed short int g; \n" + |
| "vector bool short h; \n" + |
| "vector bool short int i; \n" + |
| "vector unsigned int j; \n" + |
| "vector unsigned long k; \n" + |
| "vector unsigned long int l; \n" + |
| "vector signed int m; \n" + |
| "vector signed long n; \n" + |
| "vector signed long int o; \n" + |
| "vector bool int p; \n" + |
| "vector bool long q; \n" + |
| "vector bool long int r; \n" + |
| "vector float s; \n" + |
| "vector pixel t; \n" + |
| "__vector __pixel u; \n"; |
| |
| parse(code, getCLanguage(), true); |
| parse(code, getCPPLanguage(), true); |
| } |
| |
| // these are only treated as keywords inside a vector declaration |
| public void testReservedWords() { |
| String code = |
| "int pixel; " + |
| "int bool; "; |
| |
| parse(code, getCLanguage(), true); |
| parse(code, getCPPLanguage(), true); |
| } |
| |
| |
| public void testVectorLiterals() { |
| String code = |
| "int test() {" + |
| " (vector unsigned int)(10); " + |
| " (vector unsigned int)(14, 82, 73, 700); " + |
| " (vector pixel)(14, 82, 73, 700); " + |
| " (vector bool int)(10); " + |
| "}"; |
| |
| parse(code, getCLanguage(), true); |
| parse(code, getCPPLanguage(), true); |
| } |
| |
| public void testVectorInitializers() { |
| String code = |
| "int test() {" + |
| " vector unsigned int v3 = {1,2,3,4}; " + |
| "}"; |
| |
| parse(code, getCLanguage(), true); |
| parse(code, getCPPLanguage(), true); |
| } |
| |
| |
| public void testVectorTypedefs() { |
| String code = |
| "int test() {" + |
| " typedef vector pixel vint16; " + |
| " vint16 v1;" + |
| "}"; |
| |
| parse(code, getCLanguage(), true); |
| parse(code, getCPPLanguage(), true); |
| } |
| |
| public void testVectorCompoundLiterals() { |
| String code = |
| "int test() {" + |
| " (vector unsigned int){10}; " + |
| " (vector unsigned int){14, 82, 73, 700}; " + |
| " (vector pixel){14, 82, 73, 700}; " + |
| " (vector bool int){10}; " + |
| "}"; |
| |
| parse(code, getCLanguage(), true); |
| parse(code, getCPPLanguage(), true); |
| } |
| |
| public void testVectorAlignof() { |
| String code = |
| "int test() {" + |
| " vector unsigned int v1 = (vector unsigned int)(10); \n" + |
| " vector unsigned int *pv1 = &v1; \n" + |
| " __alignof__(v1); \n" + |
| " __alignof__(&v1); \n" + |
| " __alignof__(*pv1); \n" + |
| " __alignof__(pv1); \n" + |
| " __alignof__(vector signed char); \n" + |
| "}"; |
| |
| parse(code, getCLanguage(), true); |
| parse(code, getCPPLanguage(), true); |
| } |
| |
| public void testVectorTypeof() { |
| String code = |
| "int test() {" + |
| " vector unsigned int v1 = (vector unsigned int)(10); \n" + |
| " vector unsigned int *pv1 = &v1; \n" + |
| " __typeof__(v1); \n" + |
| " __typeof__(&v1); \n" + |
| " __typeof__(*pv1); \n" + |
| " __typeof__(pv1); \n" + |
| " __typeof__(vector signed char); \n" + |
| "}"; |
| |
| parse(code, getCLanguage(), true); |
| parse(code, getCPPLanguage(), true); |
| } |
| |
| public void _testOverloads() { |
| String code = |
| "void foo(int); \n" + |
| "void foo(vector unsigned int); \n" + |
| "void foo(vector pixel) \n" + |
| "int test() { \n" + |
| " int x; \n" + |
| " vector unsigned int y; \n" + |
| " vector pixel z; \n" + |
| " foo(x); \n" + |
| " foo(y); \n" + |
| " foo(z); \n" + |
| "} \n"; |
| |
| IASTTranslationUnit tu = parse(code, getCPPLanguage(), true); |
| |
| |
| IASTDeclaration[] decls = tu.getDeclarations(); |
| IASTName foo1 = ((IASTSimpleDeclaration)decls[0]).getDeclarators()[0].getName(); |
| IASTName foo2 = ((IASTSimpleDeclaration)decls[1]).getDeclarators()[0].getName(); |
| IASTName foo3 = ((IASTSimpleDeclaration)decls[2]).getDeclarators()[0].getName(); |
| |
| IASTFunctionDefinition func = (IASTFunctionDefinition) decls[4]; |
| IASTStatement[] stats = ((IASTCompoundStatement)func.getBody()).getStatements(); |
| |
| IASTName fooCall1 = ((IASTIdExpression)((IASTFunctionCallExpression)((IASTExpressionStatement)stats[3]).getExpression()).getFunctionNameExpression()).getName(); |
| IASTName fooCall2 = ((IASTIdExpression)((IASTFunctionCallExpression)((IASTExpressionStatement)stats[4]).getExpression()).getFunctionNameExpression()).getName(); |
| IASTName fooCall3 = ((IASTIdExpression)((IASTFunctionCallExpression)((IASTExpressionStatement)stats[5]).getExpression()).getFunctionNameExpression()).getName(); |
| |
| assertSame(foo1.resolveBinding(), fooCall1.resolveBinding()); |
| assertSame(foo2.resolveBinding(), fooCall2.resolveBinding()); |
| assertSame(foo3.resolveBinding(), fooCall3.resolveBinding()); |
| } |
| } |