1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#!/bin/bash 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# Copyright (C) 2007 The Android Open Source Project 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# Licensed under the Apache License, Version 2.0 (the "License"); 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# you may not use this file except in compliance with the License. 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# You may obtain a copy of the License at 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# http://www.apache.org/licenses/LICENSE-2.0 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# Unless required by applicable law or agreed to in writing, software 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# distributed under the License is distributed on an "AS IS" BASIS, 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# See the License for the specific language governing permissions and 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# limitations under the License. 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# opcode-gen <file> 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# 198d74cbd884b03e19f39e1753858ac15455cab33aDan Bornstein# This script uses the file bytecodes.txt (in this directory) to 208d74cbd884b03e19f39e1753858ac15455cab33aDan Bornstein# generate code inside the given <file>, based on the directives found 21d12de172a5e18f3bef8a98e3f43a14565266451bDan Bornstein# in that file. Refer to those files to understand what's being 22d12de172a5e18f3bef8a98e3f43a14565266451bDan Bornstein# generated. (Look for comments that say "BEGIN(name)" where "name" is 23973171bb01a052a302e8674b5f617383bac0647aDan Bornstein# one of the "emission" directives defined in opcode-gen.awk in this 24973171bb01a052a302e8674b5f617383bac0647aDan Bornstein# directory.) 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectfile="$1" 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecttmpfile="/tmp/$$.txt" 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 29973171bb01a052a302e8674b5f617383bac0647aDan Bornsteinecho "processing `basename $1`" 1>&2 3082dbe1c22c6a1088f73f1e11e5cacbdd492ca79dDan Bornstein 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectif [ "x$1" = "x" ]; then 32973171bb01a052a302e8674b5f617383bac0647aDan Bornstein echo "must specify a file" 1>&2 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project exit 1 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectfi 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# Set up prog to be the path of this script, including following symlinks, 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# and set up progdir to be the fully-qualified pathname of its directory. 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectprog="$0" 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectwhile [ -h "${prog}" ]; do 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project newProg=`/bin/ls -ld "${prog}"` 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project newProg=`expr "${newProg}" : ".* -> \(.*\)$"` 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if expr "x${newProg}" : 'x/' >/dev/null; then 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project prog="${newProg}" 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project progdir=`dirname "${prog}"` 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project prog="${progdir}/${newProg}" 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fi 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectdone 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectoldwd=`pwd` 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectprogdir=`dirname "${prog}"` 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcd "${progdir}" 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectprogdir=`pwd` 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectprog="${progdir}"/`basename "${prog}"` 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcd "${oldwd}" 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectbytecodeFile="$progdir/bytecode.txt" 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 58d12de172a5e18f3bef8a98e3f43a14565266451bDan Bornsteinawk -v "bytecodeFile=$bytecodeFile" -f "$progdir/opcode-gen.awk" \ 59d12de172a5e18f3bef8a98e3f43a14565266451bDan Bornstein "$file" > "$tmpfile" 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 61973171bb01a052a302e8674b5f617383bac0647aDan Bornsteinif [ "$?" = "0" ]; then 62973171bb01a052a302e8674b5f617383bac0647aDan Bornstein cp "$tmpfile" "$file" 63973171bb01a052a302e8674b5f617383bac0647aDan Bornstein rm "$tmpfile" 64973171bb01a052a302e8674b5f617383bac0647aDan Bornsteinelse 65973171bb01a052a302e8674b5f617383bac0647aDan Bornstein echo "error running awk" 1>&2 66973171bb01a052a302e8674b5f617383bac0647aDan Bornstein exit 1 67973171bb01a052a302e8674b5f617383bac0647aDan Bornsteinfi 68