/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
#pragma once

#include "JSFunction.h"
#include "MacroAssemblerCodeRef.h"
#include <wtf/SentinelLinkedList.h>

namespace JSC {

struct Instruction;

struct LLIntCallLinkInfo : public BasicRawSentinelNode<LLIntCallLinkInfo> {
    LLIntCallLinkInfo()
    {
    }
    
    ~LLIntCallLinkInfo()
    {
        if (isOnList())
            remove();
    }
    
    bool isLinked() { return !!callee; }
    
    void unlink()
    {
        callee.clear();
        machineCodeTarget = MacroAssemblerCodePtr();
        if (isOnList())
            remove();
    }
    
    WriteBarrier<JSFunction> callee;
    WriteBarrier<JSFunction> lastSeenCallee;
    MacroAssemblerCodePtr machineCodeTarget;
};

} // namespace JSC
